QT点击Qtableview表格一行弹出一个820*550的窗上面显示一个图片,并且有两个按钮
时间: 2023-12-10 22:38:17 浏览: 133
可以按照以下步骤来实现:
1. 创建一个自定义的窗口类,大小为820*550,包含一个用于显示图片的QLabel和两个QPushButton。
2. 在QTableview的信号中,获取当前选中的行数。例如,可以使用`QModelIndexList selectedIndexes = ui->tableView->selectionModel()->selectedIndexes();`来获取选中的索引列表,然后从中获取选中的行数。
3. 根据选中的行数,获取需要显示的图片路径。例如,可以使用`QVariant data = ui->tableView->model()->data(index, Qt::UserRole);`来获取该行数据中存储的图片路径。
4. 将获取到的图片路径加载到QLabel中显示。例如,可以使用`QPixmap pixmap(picturePath); ui->label->setPixmap(pixmap);`来加载并显示图片。
5. 连接两个QPushButton的槽函数,实现需要的功能。例如,可以在一个按钮的槽函数中关闭窗口,另一个按钮的槽函数中执行其他操作。
完整示例代码如下:
```
// 自定义窗口类 MyWindow
class MyWindow : public QWidget
{
Q_OBJECT
public:
explicit MyWindow(QWidget *parent = nullptr) : QWidget(parent)
{
// 创建 QLabel 和 QPushButton
label = new QLabel(this);
label->setFixedSize(800, 500);
label->move(10, 10);
btn1 = new QPushButton("按钮1", this);
btn1->setFixedSize(100, 30);
btn1->move(10, 520);
btn2 = new QPushButton("按钮2", this);
btn2->setFixedSize(100, 30);
btn2->move(710, 520);
// 连接 QPushButton 的槽函数
connect(btn1, &QPushButton::clicked, this, &MyWindow::close);
connect(btn2, &QPushButton::clicked, this, &MyWindow::doSomething);
}
public slots:
void showPicture(QString picturePath)
{
// 加载图片并显示
QPixmap pixmap(picturePath);
label->setPixmap(pixmap);
// 显示窗口
show();
}
void doSomething()
{
// 在这里实现按钮2的操作
}
private:
QLabel *label;
QPushButton *btn1;
QPushButton *btn2;
};
// 在 QTableview 的信号中弹出窗口
connect(ui->tableView, &QTableView::clicked, [=](const QModelIndex &index)
{
// 获取选中的行数
int row = index.row();
// 根据行数获取需要显示的图片路径
QVariant data = ui->tableView->model()->data(index, Qt::UserRole);
QString picturePath = data.toString();
// 创建窗口并显示图片
MyWindow *window = new MyWindow();
window->showPicture(picturePath);
});
```
阅读全文