如何将Qt组合框与按钮和某种显示图片的小部件连接起来?

时间:2016-12-18 17:22:43

标签: c++ qt qwidget qcombobox qpushbutton

我刚刚开始学习Qt,我想制作一个简单的程序,我可以选择一个图片名称(在组合框中),然后点击按钮,选中的图片将出现在widget(?)中(如果在同一个窗口中,这是可能的)。 It should look like this:

到目前为止,我遇到的最大问题是将所有这些对象连接在一起,我无法让它们正常工作。

此外,我已经尝试将图片上传到小部件,但它只显示为完整尺寸,我的程序变成了图片而没有别的。

编辑:

我想让它发挥作用,但我无法实现这一点...... 这是我的代码:

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

1 个答案:

答案 0 :(得分:0)

你的布局还可以,但我建议你使用QLabel来显示图像。

这就是我要做的事情:

  1. 在控制器类上创建一个属性来存储当前的组合框选择,可能是整数或字符串。
  2. 连接到组合框的变换信号槽。 (简单方法:在编辑器中右键单击组合框并选择&#34;转到插槽&#34;,然后选择currentIndexChanged(int index)或字符串变体。请参阅documentation
  3. 在插槽中保持我们的变量更新,以便每次更改组合框上的值时,还会更改将存储其当前状态的变量。
  4. 为按钮创建一个插槽(与组合框相同。使用信号clicked())。在插槽中,您可以在QLabel中插入te图片。
  5. 设置图片:

    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.
    
  6. 你很高兴。