如何将 Qt 组合框与按钮和某种显示图片的小部件连接起来?
How to connect Qt combobox with pushbutton and some kind of widget that shows picture?
我刚开始学习 Qt,我想制作一个简单的程序,我可以 select 图片名称(在组合框中),然后单击按钮,selected 图片就会出现在 widget(?) 中(如果可能的话,在同一个 window 中)。
它应该是这样的:
到目前为止我遇到的最大问题是将所有这些对象连接在一起,我无法使它们正常工作。
我也试过将图片上传到小部件,但它只显示为全尺寸,我的程序变成了图片,没有别的。
编辑:
我正在努力让它发挥作用,但我做不到..
这是我的代码:
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_comboBox_currentIndexChanged(int index)
{
connect(ui->comboBox, SIGNAL(currentIndexChanged(int index)), this, SLOT(on_pushButton_clicked(int index)));
}
void MainWindow::choiceChanged(int index)
{
switch (index) {
case 0:
firstPicture();
break;
case 1:
secondPicture();
break;
case 2:
thirdPicture();
break;
}
}
void MainWindow::on_pushButton_clicked(int index)
{
connect(ui->pushButton, SIGNAL(on_pushButton_clicked(int)), this, SLOT(choiceChanged(int)));
}
void MainWindow::firstPicture(){
QPixmap image("C:/Documents/Aaaa.png");
ui->label->setPixmap(image);
}
void MainWindow::secondPicture(){
QPixmap image("C:/Documents/Bbbb.png");
ui->label->setPixmap(image);
}
void MainWindow::thirdPicture(){
QPixmap image("C:/Documents/Cccc.png");
ui->label->setPixmap(image);
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked(int index);
void choiceChanged(int index);
void on_comboBox_currentIndexChanged(int index);
void firstPicture();
void secondPicture();
void thirdPicture();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
你的布局没问题,但我建议你使用 QLabel 来显示图像。
所以这就是我要做的:
- 在控制器上class创建一个属性来存储当前的组合框selection,可能是整数或字符串。
- 连接到组合框插槽的信号更改。 (简单方法:右键单击编辑器中的组合框和 select "Go to slot",然后选择
currentIndexChanged(int index)
或字符串变体。参见 documentation)
- 在插槽中更新我们的变量,这样每次您更改组合框上的值时,您也会更改将存储其当前状态的变量。
- 为按钮创建一个插槽(与组合框相同。使用信号
clicked()
)。在插槽中,您可以在 QLabel 中插入图片。
图片设置:
QPixmap image("/path/to/image/chosen/image.jpg"); //choose the path accordingly to the variable stored that mirrors the state of the combobox.
ui->imageLabel->setPixmap(image); //change imageLabel to the name of your label.
一切顺利。
我刚开始学习 Qt,我想制作一个简单的程序,我可以 select 图片名称(在组合框中),然后单击按钮,selected 图片就会出现在 widget(?) 中(如果可能的话,在同一个 window 中)。 它应该是这样的:
到目前为止我遇到的最大问题是将所有这些对象连接在一起,我无法使它们正常工作。
我也试过将图片上传到小部件,但它只显示为全尺寸,我的程序变成了图片,没有别的。
编辑:
我正在努力让它发挥作用,但我做不到.. 这是我的代码:
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_comboBox_currentIndexChanged(int index)
{
connect(ui->comboBox, SIGNAL(currentIndexChanged(int index)), this, SLOT(on_pushButton_clicked(int index)));
}
void MainWindow::choiceChanged(int index)
{
switch (index) {
case 0:
firstPicture();
break;
case 1:
secondPicture();
break;
case 2:
thirdPicture();
break;
}
}
void MainWindow::on_pushButton_clicked(int index)
{
connect(ui->pushButton, SIGNAL(on_pushButton_clicked(int)), this, SLOT(choiceChanged(int)));
}
void MainWindow::firstPicture(){
QPixmap image("C:/Documents/Aaaa.png");
ui->label->setPixmap(image);
}
void MainWindow::secondPicture(){
QPixmap image("C:/Documents/Bbbb.png");
ui->label->setPixmap(image);
}
void MainWindow::thirdPicture(){
QPixmap image("C:/Documents/Cccc.png");
ui->label->setPixmap(image);
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked(int index);
void choiceChanged(int index);
void on_comboBox_currentIndexChanged(int index);
void firstPicture();
void secondPicture();
void thirdPicture();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
你的布局没问题,但我建议你使用 QLabel 来显示图像。
所以这就是我要做的:
- 在控制器上class创建一个属性来存储当前的组合框selection,可能是整数或字符串。
- 连接到组合框插槽的信号更改。 (简单方法:右键单击编辑器中的组合框和 select "Go to slot",然后选择
currentIndexChanged(int index)
或字符串变体。参见 documentation) - 在插槽中更新我们的变量,这样每次您更改组合框上的值时,您也会更改将存储其当前状态的变量。
- 为按钮创建一个插槽(与组合框相同。使用信号
clicked()
)。在插槽中,您可以在 QLabel 中插入图片。 图片设置:
QPixmap image("/path/to/image/chosen/image.jpg"); //choose the path accordingly to the variable stored that mirrors the state of the combobox. ui->imageLabel->setPixmap(image); //change imageLabel to the name of your label.
一切顺利。