Qt QTableView不能响应鼠标点击

PYB不开心 2016-04-08 05:14:44
首先经过测试,用QtDesigner加入一个Table Widget,它可以响应鼠标点击的事件,我可以选中里面的item。
然后如果我写这样的代码:
 
w.view->setModel(model);//view是主窗口w的一个private成员
w.view->setSelectionMode(QAbstractItemView::ExtendedSelection);//设置每次选中的个数(单个,多个)
w.view->setSelectionBehavior(QAbstractItemView::SelectItems);//设置选中的形式(行,列,单个)
// view->setColumnHidden(0, true);
w.view->verticalHeader()->setVisible(false);//隐藏表头
w.view->resizeColumnsToContents();//列的宽度自适应内容
w.view->setEditTriggers(QAbstractItemView::NoEditTriggers);
QHeaderView *header = w.view->horizontalHeader();
header->setStretchLastSection(true);
int width = w.geometry().width()/2;
int height =w.geometry().height()/2;


w.view->setGeometry(width,height,width,height);//这样控制位置就不能选中里面的item
// w.setCentralWidget(w.view);//如果这样控制view的位置,就可以选中view里面的item.

w.view->show();

搞了半天没弄明白原因,按理来说子窗口应该先于父窗口响应鼠标点击的,但是view就是不能选中,滚动条也不能动.我的问题:
[0]:为什么用.setCentralWidget我的view就可以选中,用setGeometry设置下view的位置就出现这样的情况?
//不能选中
//可以选中
...全文
1958 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
PYB不开心 2016-04-12
  • 打赏
  • 举报
回复
引用 6 楼 killerls 的回复:
楼主可以看一下,setupui的代码,好像这个代码里面做了很多布局相关的工作。是不是你的view实际上被mainwindow的centialwidget覆盖了,只不过centralwidget是透明的?
有可能哈,我是初学者,不知道mainwindow还有个centralwidget.....我再看看.
killerls 2016-04-11
  • 打赏
  • 举报
回复
楼主可以看一下,setupui的代码,好像这个代码里面做了很多布局相关的工作。是不是你的view实际上被mainwindow的centialwidget覆盖了,只不过centralwidget是透明的?
PYB不开心 2016-04-09
  • 打赏
  • 举报
回复
引用 3 楼 caoshangpa 的回复:
我试了一下,可以选中呀
我找到问题代码了:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),view(new QTableView(this)),//这样就可以
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
//view =  new QTableView(this);//这样就不行


}
我在函数体之前初始化view就不能选中,在函数体里面初始化就不行,然后我试了一下这样的代码
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),//view(new QTableView(this)),//这样就可以
    ui(new Ui::MainWindow)
{

view =  new QTableView(this);//这样就不行
 ui->setupUi(this);

}
发现是ui必须在view的初始化之前加载界面...我想请教一下ui加载顺序为什么会造成这种情况?
草上爬 2016-04-09
  • 打赏
  • 举报
回复
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QTableView> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); QTableView *view; private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); view=new QTableView(this); } MainWindow::~MainWindow() { delete ui; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include "mainwindow.h" #include <QApplication> #include <QHeaderView> #include <QStandardItemModel> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; QStandardItemModel *model = new QStandardItemModel(); model->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr("ID"))); model->setHorizontalHeaderItem(1, new QStandardItem(QObject::tr("Name"))); model->setHorizontalHeaderItem(2, new QStandardItem(QObject::tr("Age"))); model->setItem(0, 0, new QStandardItem("1")); model->setItem(0, 1, new QStandardItem("cheng")); model->setItem(0, 2, new QStandardItem("24")); model->setItem(1, 0, new QStandardItem("2")); model->setItem(1, 1, new QStandardItem("jack")); model->setItem(1, 2, new QStandardItem("23")); w.view->setModel(model);//view是主窗口w的一个private成员 w.view->setSelectionMode(QAbstractItemView::ExtendedSelection);//设置每次选中的个数(单个,多个) w.view->setSelectionBehavior(QAbstractItemView::SelectItems);//设置选中的形式(行,列,单个) // view->setColumnHidden(0, true); w.view->verticalHeader()->setVisible(false);//隐藏表头 w.view->resizeColumnsToContents();//列的宽度自适应内容 w.view->setEditTriggers(QAbstractItemView::NoEditTriggers); QHeaderView *header = w.view->horizontalHeader(); header->setStretchLastSection(true); int width = w.geometry().width()/2; int height =w.geometry().height()/2; w.view->setGeometry(width,height,width,height);//这样控制位置就不能选中里面的item // w.setCentralWidget(w.view);//如果这样控制view的位置,就可以选中view里面的item. w.show(); return a.exec(); } 我尽量按照你的方法写的代码
草上爬 2016-04-09
  • 打赏
  • 举报
回复
我试了一下,可以选中呀
PYB不开心 2016-04-09
  • 打赏
  • 举报
回复
引用 1 楼 caoshangpa 的回复:
w是个什么类型的变量
是一个继承自QMainwindow的类的实例.
草上爬 2016-04-09
  • 打赏
  • 举报
回复
w是个什么类型的变量

16,815

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧