通过 QPushButton 信号更改 QLabel setPixmap()
Changing QLabel setPixmap() through a QPushButton signal
我正在编写一个简单的程序,当按下按钮时显示图像。 我对Qt很陌生,而且我没有任何运气确定我的问题发生在哪里。
class ImageSwitcher : public QWidget
{
Q_OBJECT
public:
ImageSwitcher();
QPushButton *leftButton;
QPushButton *rightButton;
~ImageSwitcher();
private slots:
void switchImages(QPixmap display);
private:
QLabel *canvas;
QPixmap *one;
QPixmap *two;
};
类声明:
ImageSwitcher::ImageSwitcher (void) {
canvas = new QLabel;
one = new QPixmap;
two = new QPixmap;
leftButton = new QPushButton("&One");
rightButton = new QPushButton("&Two");
one->load("one.png");
two->load("two.png");
//Close the program if the images cannot be loaded.
//Load the images to the QPixmaps.
//Connect the left and right buttons.
QObject::connect(leftButton, SIGNAL(clicked()), canvas, SLOT(switchImages(*one)));
QObject::connect(rightButton, SIGNAL(clicked()), canvas, SLOT(switchImages(*two)));
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(canvas);
layout->addWidget(leftButton);
layout->addWidget(rightButton);
QWidget window;
window.setLayout(layout);
}
void ImageSwitcher::switchImages(QPixmap display) {
canvas->setPixmap(display);
}
ImageSwitcher::~ImageSwitcher (void) {
delete canvas;
delete one;
delete two;
delete leftButton;
delete rightButton;
}
最后是主要功能:
int main (int args, char **argv)
{
QApplication app(args, argv);
ImageSwitcher test;
test.show();
return app.exec();
}
我遇到的第一个问题是我的布局设置不正确。 其次,命令行警告 switchImages() 不是两个人的插槽。 奇怪的是,它并没有给我同样的警告。 当我运行时,没有任何小部件填充,因此,我不确定连接是否正常工作。
任何帮助不胜感激,谢谢。
您对信号和插槽的使用是错误的。在连接呼叫中,您必须给出信号的签名和插槽而不是值。值通过发射传输。基本上,您应该为每次按钮单击实现插槽,然后使用 QPixmap 参数发出新信号。
signals:
void changeImage(QPixmap);
...
private slots:
...
void onLeftButton();
在构造函数中:
...
connect(this, SIGNAL(changeImage(QPixmap)), this, SLOT(switchImages(QPixmap)));
...
在 onLeftButton():
emit changeImage(*one)
-----编辑-----
再次查看您的代码,我看到了问题。在构造函数中:
ImageSwitcher::ImageSwitcher (void) {
...
QWidget window;
window.setLayout(layout);
}
QWidget window;
在堆栈上创建一个 QWidget。这意味着它将在显示之前被销毁。由于 ImageSwitcher 继承了 QWidget(ImageSwitcher 是 QWidget),您可能打算编写:
ImageSwitcher::ImageSwitcher (void) {
...
setLayout(layout); // same as this->setLayout(layout);
}
相关文章:
- 如何使用新运算符跟踪在循环中创建的 QLabel
- 除了构造函数之外,还创建 QLabel
- 在 QLabel 中显示视频
- Qt GUI使用Qfiledialogbox和qlabel显示视频,这是我的代码
- 如何在C++中将自定义文本设置为 QLabel?
- 如何使用鼠标单击选择多个 QLabel 对象?
- 在特定时间内更改 QLabel 的背景颜色
- 如何将QLabel放入切换按钮Qt c ++中
- 如何在QListWidget中显示QStringList的每个项目QLabel和另一个QString?
- 类继承自QLabel,为什么不调用自定义插槽?
- 使用 QpushButton 切换显示在 QLabel 中的图像
- QLabel 未正确更新
- Qt多线程:如何更新两个QLabel?
- 如何在Qt中为任何QLabel设置可访问的名称,我们可以使用Windows讲述人读取
- QT-如何在我的笔记本电脑上全屏显示Qlabel
- 麻烦编译可单击的Qlabel
- 将一个 Qlabel 的 QPixmap 复制到另一个 Qlabel
- 通过 QPushButton 信号更改 QLabel setPixmap()
- Qt QLabel setPixmap 不需要的填充
- QLabel::setPixmap() and QScrollArea::setWidget()