Мне нужно знать, когда отображается verticalScrollBar
моего 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', скомпилировать и запустить. Наиболее критично, вы не показываете **, когда ** вы вызываете запросы. Вы просто говорите нам, что ожидаете чего-то другого, но нет никакого способа узнать, чего вы ожидаете, и почему, не видя кода, не имея необходимости вторгаться в вещи. –
На самом деле, я не могу разделить весь код, и у меня нет много времени, чтобы написать полный пример, который показывает всю «ситуацию». Спасибо, в любом случае. – KelvinS