小编Rei*_*ica的帖子

派生对象上的C++虚函数调用是否通过vtable?

在下面的代码中,它通过指向派生对象的指针调用虚函数foo.这个电话会通过vtable还是B::foo直接打电话?

如果它是通过vtable进行的,那么B::foo直接调用它的C++惯用方法是什么?我知道在这种情况下我总是指着一个B.

Class A
{
    public:
        virtual void foo() {}
};

class B : public A
{
    public:
        virtual void foo() {}
};


int main()
{
    B* b = new B();
    b->foo();
}
Run Code Online (Sandbox Code Playgroud)

c++ virtual

7
推荐指数
3
解决办法
2402
查看次数

以编程方式进行Qt GUI设计

我正在尝试创建一个GUI应用程序.

主窗口a QMainWindow包含9个固定大小的标签以及主窗口的大小.

我尝试在没有Qt GUI Designer的情况下以编程方式进行编程.该项目构建没有错误,但我看不到主窗口上显示的任何标签或布局.它只是空白.

这是我的源代码:

WCwindow::WCwindow()
{
   // initialize widgets with text
   CAM111 = new QLabel("CAM 01");
   CAM121 = new QLabel("CAM 02");
   CAM131 = new QLabel("CAM 03");

   CAM211 = new QLabel("CAM 04");
   CAM221 = new QLabel("CAM 05");
   CAM231 = new QLabel("CAM 06");

   CAM311 = new QLabel("CAM 07");
   CAM321 = new QLabel("CAM 08");
   CAM331 = new QLabel("CAM 09");

   CAM111->setFixedSize(wcW,wcH);
   CAM121->setFixedSize(wcW,wcH);
   CAM131->setFixedSize(wcW,wcH);
   CAM211->setFixedSize(wcW,wcH);
   CAM221->setFixedSize(wcW,wcH);
   CAM231->setFixedSize(wcW,wcH);
   CAM311->setFixedSize(wcW,wcH);
   CAM321->setFixedSize(wcW,wcH);
   CAM331->setFixedSize(wcW,wcH);

   QGridLayout *layout = new QGridLayout;
   layout->addWidget(CAM111,0,0);
   layout->addWidget(CAM121,0,1);
   layout->addWidget(CAM131,0,2);

   layout->addWidget(CAM211,1,0);
   layout->addWidget(CAM221,1,1);
   layout->addWidget(CAM231,1,2); …
Run Code Online (Sandbox Code Playgroud)

user-interface qt

7
推荐指数
1
解决办法
1万
查看次数

自定义样式Qt快速控制

我想为我的Qt Quick Controls设计一个定制设计.例如,我想改变工具栏的背景颜色,因为我讨厌默认设计.我怎样才能做到这一点?

qt qml

7
推荐指数
1
解决办法
4912
查看次数

QQuickWindow透明

即时通讯使用QQml.AppindEngine和QQuickWindow进行应用程序,我无法透明主窗口.我想在应用程序弹出之前设置一个启动画面,我使用Window组件,它应该是透明的,但它不是,我的main.cpp是

int main(int argc, char *argv[])
{
Application app(argc, argv);

QShookaClient shooka_client;
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("shooka", &shooka_client);
engine.load(QUrl("qrc:///shooka/shooka.qml"));

QObject *topLevel = engine.rootObjects().value(0);
QQuickWindow *window = qobject_cast<QQuickWindow *>(topLevel);

window->show();
window->setFlags(Qt::FramelessWindowHint);
window->setColor(Qt::transparent);

return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

但是setColor在win7中不起作用.我知道有QDeclarativeView的方法,甚至我找到了QQuickview的解决方案,它有点适用于QQuickWindow但是没有,任何人都可以帮助我...

qt

7
推荐指数
3
解决办法
4166
查看次数

将QTableView与模型一起使用

我有QVector cars,我想根据汽车的注册号进行过滤.我想创建一个新的过滤矢量.我认为这没关系,因为我正在迭代2个向量,从第一个向量复制到第二个向量.我这样做了吗?

void MainWindow::on_actionBy_registration_number_triggered()
{
    myDialog = new MyDialog(this);
    myDialog->exec();

    QString toSearchString = myDialog->getRegistrationNumber();
    QVector<Vehicle> founded;
    QVectorIterator<Vehicle> iterator(cars);
    while(iterator.hasNext()){
        Vehicle car = iterator.next();
        QString num = car.getRegistration().getRegistrationNumber();
        if(num.contains(toSearchString,Qt::CaseInsensitive)){
            founded.append(car);
        }
    }
    model = new QStandardItemModel(founded.size(),5,this);

    //create header
    createHeader(model);

    int j = 0; //row
    QVectorIterator<Vehicle> iter(founded);
    while(iter.hasNext()){
        Vehicle output = iter.next();
        //set car
        QString makeAndModel = output.getGeneralData().getMake() + output.getGeneralData().getModel();
        QStandardItem *mAndM = new QStandardItem(QString(makeAndModel));
        model->setItem(j,0,mAndM);

        //set type
        QStandardItem *type = new QStandardItem(QString(output.getGeneralData().getType()));
        model->setItem(j,1,type);

        //set mileage
        QString mileageString = QString::number(output.getGeneralData().getMileage());
        QStandardItem …
Run Code Online (Sandbox Code Playgroud)

c++ qt model-view

7
推荐指数
1
解决办法
2万
查看次数

如何在QEventLoop中检测挂起?

我不确定我的问题标题是否正确,所以要解释我的意思,请考虑以下示例:

我用它创建一个QApplication和一个.然后我将一个处理程序附加到按钮上的点击信号,如下所示:QWidgetQPushButton

void MyWidget::on_pushButton_clicked(){
    //Never return
    while(true);
}
Run Code Online (Sandbox Code Playgroud)

最后,我启动应用程序的事件循环,当我运行程序并显示窗口时单击按钮.

在我的情况下,这将停止整个应用程序.所以我现在的问题是如何从代码中"检测"我的应用程序中发生了这种挂断?

我知道编写在信号处理程序中没有返回的代码是不好的做法,我问这个问题是因为我想检测错误并从中恢复,可能是通过重新启动应用程序来努力提高生产时的弹性.

谢谢!

qt event-loop recover hang qt5

7
推荐指数
2
解决办法
3855
查看次数

如何更改QStringListModel项的颜色?

我有

QListView *myListView;
QStringList *myStringList;
QStringListModel *myListModel;
Run Code Online (Sandbox Code Playgroud)

我用这样的数据填写:

myStringList->append(QString::fromStdString(...));
myListModel->setStringList(*myStringList);
myListView->setModel(myListModel);
Run Code Online (Sandbox Code Playgroud)

我想更改一些列表条目的字体颜色,所以我试过:

for (int i = 0; i < myListModel->rowCount(); ++i) {
    std::cerr << myListModel->index(i).data().toString().toStdString() << std::endl;
    myListModel->setData(myListModel->index(i), QBrush(Qt::green), Qt::ForegroundRole); 
}
Run Code Online (Sandbox Code Playgroud)

数据正确打印到cerr,但颜色不会改变.我错过了什么?

c++ qt qlistview

7
推荐指数
1
解决办法
938
查看次数

我的Qt eventFilter()不会按预期停止事件

我的eventFilter出现了根本性的错误,因为它让一个事件都通过,而我想要阻止一切.我已经阅读了很多文档QEvent,eventFilter()等等,但显然我错过了很多东西.基本上,我正在尝试为我的弹出窗口类创建自己的模态功能QDialog.我想实现自己的,因为内置setModal(true)包含很多功能,例如播放QApplication::Beep(),我想排除.基本上,我想丢弃所有进入创建弹出窗口的QWidget(窗口)的事件.到目前为止我所拥有的是,

// popupdialog.h
#ifndef POPUPDIALOG_H
#define POPUPDIALOG_H

#include <QDialog>
#include <QString>

namespace Ui {class PopupDialog;}

class PopupDialog : public QDialog
{
   Q_OBJECT
public:
    explicit PopupDialog(QWidget *window=0, QString messageText="");
    ~PopupDialog();
private:
    Ui::PopupDialog *ui;
    QString messageText;
    QWidget window; // the window that caused/created the popup
    void mouseReleaseEvent(QMouseEvent*); // popup closes when clicked on
    bool eventFilter(QObject *, QEvent*);
};
Run Code Online (Sandbox Code Playgroud)

...

// popupdialog.cpp
#include "popupdialog.h"
#include "ui_popupdialog.h"

PopupDialog::PopupDialog(QWidget …
Run Code Online (Sandbox Code Playgroud)

c++ qt modal-dialog

7
推荐指数
2
解决办法
7812
查看次数

Python请求需要很长时间

基本上我正在处理一个 python 项目,我从 sec edgar 数据库下载和索引文件。然而,问题是使用请求模块时,将文本保存在变量中需要很长时间(一个文件在 130 到 170 秒之间)。

该文件大约有 1600 万个字符,我想看看是否有任何方法可以轻松降低检索文本所需的时间。 - 例子:

import requests

url ="https://www.sec.gov/Archives/edgar/data/0001652044/000165204417000008/goog10-kq42016.htm"

r = requests.get(url, stream=True)

print(r.text)
Run Code Online (Sandbox Code Playgroud)

谢谢!

python-requests

7
推荐指数
2
解决办法
9507
查看次数

如何在qmake中禁用C++ 11?

项目文件:

CONFIG -= qt
QMAKE_CXXFLAGS += -std=c++98
QMAKE_CXXFLAGS -= -std=c++11
QMAKE_CXXFLAGS -= -std=gnu++11
CONFIG -= c++11
Run Code Online (Sandbox Code Playgroud)

结果:

g++ -c -pipe -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -Wno-unused-but-set-variable -Wno-reorder -Wno-missing-field-initializers -std=c++98 -DDEBUG -g -std=gnu++11 -Wall -W -fPIC -DQT_QML_DEBUG -I../../qqq -I. -I../src/jsoncpp -I../lib -I../../../../Qt/5.9.1/gcc_64/mkspecs/linux-g++ -o ../build/debug/obj/TaskManager.o ../src/TaskManager.cpp
g++ -c -pipe -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -Wno-unused-but-set-variable -Wno-reorder -Wno-missing-field-initializers -std=c++98 -DDEBUG -g -std=gnu++11 -Wall -W -fPIC -DQT_QML_DEBUG -I../../qqq -I. -I../src/jsoncpp -I../lib -I../../../../Qt/5.9.1/gcc_64/mkspecs/linux-g++ -o ../build/debug/obj/Utils.o ../src/Utils.cpp
Run Code Online (Sandbox Code Playgroud)

如你所见,选项-std=gnu++11仍然存在(没有任何反应"QMAKE_CXXFLAGS -="/ "CONFIG -=").

Qt的:

Qt Creator 4.3.1 …
Run Code Online (Sandbox Code Playgroud)

qt qmake c++11

7
推荐指数
0
解决办法
1440
查看次数