【发布时间】:2016-12-21 20:27:24
【问题描述】:
我需要知道我的QTableWidget 的verticalScrollBar 何时显示。
我目前正在使用以下指令:
标题:
#ifndef MYCLASS_H
#define MYCLASS_H
#include <QDebug>
#include <QWidget>
#include <QScrollBar>
namespace Ui {
class MyClass;
}
class MyClass: public QWidget
{
Q_OBJECT
public:
explicit MyClass(QWidget *parent = 0);
~MyClass();
private:
void populateTable(QVector<QString> content);
private:
Ui::MyClass *ui;
};
#endif // MYCLASS_H
填充表函数:
void MyClass::populateTable(QVector<QString> content)
{
while( ui->myTableWidget->rowCount() > 0 )
{
ui->myTableWidget->removeRow(0);
}
QTableWidgetItem* item;
for (int row = 0; row < content.length(); ++row)
{
ui->myTableWidget->insertRow(row);
item = new QTableWidgetItem( QString::number(row) );
item->setTextAlignment(Qt::AlignCenter);
ui->myTableWidget->setItem(row, 0, item);
item = new QTableWidgetItem( content.at(row) );
item->setTextAlignment(Qt::AlignCenter);
ui->myTableWidget->setItem(row, 1, item);
}
qDebug() << "This : " << this->isVisible();
qDebug() << "QTableWidget : " << ui->myTableWidget->isVisible();
qDebug() << "VerticalScrollBar : " << ui->myTableWidget->verticalScrollBar()->isVisible(); // <-HERE
}
输出:
// Called from the constructor
This : false
QTableWidget : false
VerticalScrollBar : false
// Called by a button pressed
This : true
QTableWidget : true
VerticalScrollBar : true
This : true
QTableWidget : true
VerticalScrollBar : false
但它返回一个错误的值。 ScrollBar 可见时返回 false,不可见时返回 true。 注意:myTableWidget (QTableWidget) 始终可见。
有没有其他方法可以做到这一点?
我使用的是 Qt 5.3.2 版
【问题讨论】:
-
您的期望是错误的。返回的值是正确的。就这样。当您查询小部件时,它要么不可见,要么尚未隐藏。您必须重新设计代码以在适当的时间查询或停止,具体取决于没有记录为您期望的行为。
-
这不是一个完整的例子。一个完整的例子是一个单文件的最小代码段,任何人都可以复制粘贴到
main.cpp,编译和运行。最关键的是,您没有显示何时调用查询。您只是在告诉我们您期望其他东西,但是如果不查看代码,就无法知道您期望什么以及为什么要进行第二次猜测。 -
实际上,我无法共享整个代码,而且我现在也没有太多时间来编写一个完整的示例来显示整个“情况”。还是谢谢。
-
共享整个代码会很糟糕,因为整个事情是不必要的。 “代码转储”问题很糟糕。您应该展示一个重现问题的最小示例:这样从字面上删除任何代码都会使问题消失。这就是minimal的意思。
标签: c++ qt qtablewidget