- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个简单的程序,在按下按钮时显示图像。我是 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() 不是两个的 SLOT。奇怪的是,它并没有给我同样的警告。当我运行时,没有一个小部件会填充,因此,我不确定连接是否正常工作。
感谢任何帮助,谢谢。
最佳答案
你对信号和槽的使用是错误的。在连接调用中,您必须给出信号的签名和槽而不是值。值通过发射传输。基本上你应该为每个按钮点击实现插槽,而不是用 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 窗口;
在堆栈上创建一个 QWidget。这意味着它会在显示之前被销毁。由于 ImageSwitcher 继承了 QWidget(ImageSwitcher 是一个 QWidget),您可能打算这样写:
ImageSwitcher::ImageSwitcher (void) {
...
setLayout(layout); // same as this->setLayout(layout);
}
关于c++ - 通过 QPushButton 信号更改 QLabel setPixmap(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13562615/
很简单,我试图在一个简单的 Qt GUI 应用程序中显示图像。 我有这个代码: ui->label_2->setVisible(true); QPixmap supremect(":/images/s
我使用 pyqt 设计器创建了一个最小的示例,该示例在按下按钮时更改标签的文本,并且应该通过标签在窗口中显示屏幕截图。 不幸的是,该示例在尝试在标签中显示屏幕截图时崩溃了。 from PIL.Imag
我使用 pyqt 设计器创建了一个最小的示例,该示例在按下按钮时更改标签的文本,并且应该通过标签在窗口中显示屏幕截图。 不幸的是,该示例在尝试在标签中显示屏幕截图时崩溃了。 from PIL.Imag
我有一个 QLabel,其大小策略为 QSizePolicy::Expanding,我想在其中显示带有 QLabel::setPixmap 的图像。主窗口不应调整大小,这就是我在设置 QLabel 的
我正在编写一个简单的程序,在按下按钮时显示图像。我是 Qt 的新手,我无法确定我的问题出在哪里。 class ImageSwitcher : public QWidget { Q_OBJECT
我一直在追踪一个归结为这个的错误 - 如果您在滚动区域内显示图像标签,如果 QLabel::setPixmap() 在 QScrollArea::setWidget() 之后被调用。 这个例子说明了问
我有一个程序可以使用套接字相互发送和接收图像。服务器使用'image.tostring()'发送图像数据,客户端接收它并使用'Image.fromstring'将其转换回图像,然后使用'ImageQt
我是一名优秀的程序员,十分优秀!