没有名为' setResizeMode'在' QHeaderView' - 将Qt 4.7转换为Qt 5.8

时间:2017-03-12 02:46:31

标签: c++ qt qt5

我需要将Qt遗留代码从4.7转换为5.8 ,我在Qt Creator 4.2.1 Clang 7.0(Apple)64bit中有编译错误。

查看.cpp文件

#include "frmMainTableView_UI.h"
#include <QHeaderView>

void frmMainTableView_UI::setupUI(const QMap<int, QString> &columnNames_, bool hasRowLabels_, QWidget *parent_)
{
    widget = new QWidget(parent_);

    layout = new QVBoxLayout(widget);
    layout->setSpacing(0);
    layout->setMargin(1);

    frmMainToolbar_UI::setupUI(columnNames_, widget);

    tableSplitter = new QSplitter(widget);

    table = new mpiTableView(hasRowLabels_, widget);
    tableCopy = new QShortcut(Qt::CTRL + Qt::Key_C, table);
    if (!hasRowLabels_)
        table->verticalHeader()->hide();
    table->setSelectionMode(QAbstractItemView::ExtendedSelection);
    table->setSelectionBehavior(QAbstractItemView::SelectRows);
    table->setAlternatingRowColors(true);
    table->horizontalHeader()->setHighlightSections(false);
    table->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);  // Error convert Qt4 to Qt5 ??
    table->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents);  // Error convert Qt4 to Qt5  ??
    tableSplitter->addWidget(table);
    tableSplitter->setStretchFactor(0, 3);

    layout->addWidget(toolbar);
    layout->addWidget(tableSplitter);
}

.cpp中的2个错误

在../src/ui/frmMainTableView_UI.cpp:1中包含的文件中: ../src/ui/frmMainTableView_UI.h:21:18:警告:&#39; frmMainTableView_UI :: setupUI&#39;隐藏重载的虚函数[-Woverloaded-virtual]     virtual void setupUI(const QMap&amp; columnNames_,bool hasRowLabels_,QWidget * parent_ = 0);                  ^

../ src / ui / frmMainToolbar_UI.h:31:18:注意:隐藏的重载虚函数&#39; frmMainToolbar_UI :: setupUI&#39;这里声明:参数数量不同(2对3)     virtual void setupUI(const QMap&amp; columnNames_,QWidget * parent_ = 0);                  ^

../ src / ui / frmMainTableView_UI.cpp:24:30:错误:没有名为&#39; setResizeMode&#39;在&#39; QHeaderView&#39; ;你是说&section; sectionResizeMode&#39;?     表 - &GT; verticalHeader() - &GT; setResizeMode(QHeaderView :: ResizeToContents); // JDL错误将Qt4转换为Qt5 ??                              ^ ~~~~~~~~~~~~                              sectionResizeMode /Users/john/Qt/5.8/clang_64/lib/QtWidgets.framework/Headers/qheaderview.h:133:16:注意:&#39; sectionResizeMode&#39;在这里宣布     ResizeMode sectionResizeMode(int logicalIndex)const;                ^

../ src / ui / frmMainTableView_UI.cpp:25:32:错误:没有名为&#39; setResizeMode&#39;在&#39; QHeaderView&#39; ;你是说&section; sectionResizeMode&#39;?     表 - &GT; horizo​​ntalHeader() - &GT; setResizeMode(QHeaderView :: ResizeToContents); // JDL错误将Qt4转换为Qt5 ??                                ^ ~~~~~~~~~~~~                                sectionResizeMode /Users/john/Qt/5.8/clang_64/lib/QtWidgets.framework/Headers/qheaderview.h:133:16:注意:&#39; sectionResizeMode&#39;在这里宣布     ResizeMode sectionResizeMode(int logicalIndex)const;                ^

1次警告,产生2次错误 make:*** [frmMainTableView_UI.o]错误1 18:29:48:过程&#34; / usr / bin / make&#34;退出代码2。 构建/部署项目mypersonalindex时出错(工具包:Desktop Qt 5.8.0 clang 64bit) 执行步骤&#34;制作&#34;

Qt5文档提到了 QHeaderView的过时成员 QHeaderView类的以下成员已过时。它们用于保持旧的源代码工作。我们强烈建议不要在新代码中使用它们。

(已废弃)void setResizeMode(ResizeMode模式)

我的C ++技能非常有限,您是否看到任何可以将其从Qt4转换为Qt5的小调整。 ......那么替代品是什么?

1 个答案:

答案 0 :(得分:8)

我猜你需要更换两条过时的行:

table->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);  
table->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents); 

使用以下Qt 5代码:

table->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); 
table->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); 

请参阅docs