小编buc*_*uck的帖子

在C++中使用C风格的struct/typedef

我有一个混合C和C++的项目.在C头文件中,我有这样的代码:

typedef struct mystruct* mystruct;
struct mystruct {
    // whatever struct needs
};
Run Code Online (Sandbox Code Playgroud)

要在C++文件中使用它,我正在做:

extern "C" {
#include "mystruct.h"
}
Run Code Online (Sandbox Code Playgroud)

所以你看到我正在使用相同的名称创建一个不透明的指针.这在C中很好,但在C++中却没有(因为需要在C中使用struct关键字进行实例化,而不是在C++中实例化).但是,在尝试编译C++代码时出现错误(冲突的声明).我认为使用extern "C"将使编译器将C头视为C,但似乎仍然将它用作C++.对这里发生的事情有什么解释吗?

c c++ struct typedef extern

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

Qt QTableView在活动单元格周围绘制边框

我正在尝试在QTableView中实现类似Excel的行为,其中边框绘制在整个当前选择周围.我尝试了这种感觉就像一百种不同的方式,并不断遇到问题.我可以很容易地绘制边框,但只要选择更改,就会留下边框的残余.这是我在QTableView :: paintEvent中尝试过的一个例子......


void MyTableView::paintEvent(QPaintEvent* event)
{
    // call QTableView's paint event first so we can draw over it
    QTableView::paintEvent(event);

    // activeSelection is a list of indexes that is updated in another function
    // the function also calls QTableView::repaint whenever this list changes
    // in an attempt to erase the previously drawn border
    if(!activeSelection.size())
        return;

    QRect rect = visualRect(activeSelection.at(0)) |
           visualRect(activeSelection.at(activeSelection.size() - 1));
    // temporarily draw smaller border so it doesn't lie on the grid lines
    rect.adjust(4, 4, -4, -4); …
Run Code Online (Sandbox Code Playgroud)

qt border qtableview qitemdelegate

6
推荐指数
1
解决办法
3403
查看次数

Qt:调整无边框小部件的大小

我的问题与问题基本相同,但适用于Qt C++框架.

我通过使用标志Qt :: QPopup |继承QWidget来实现一个弹出窗口 Qt的:: QWindow.我希望这个窗口是可移动的和可调整大小的,我现在通过使用以下代码中的鼠标事件来实现这一点:

void TextPopup::mousePressEvent(QMouseEvent* event)
{
    offset = event->pos();
    QWidget::mousePressEvent(event);
}

void TextPopup::mouseMoveEvent(QMouseEvent* event)
{
    if(event->buttons() & Qt::LeftButton)
        if(resizeMode) {
            QPoint p = mapToGlobal(event->pos()) - geometry().topLeft();
            resize(p.x(), p.y());
        } else
            move(mapToParent(event->pos() - offset));
    else {
        QPoint diff = geometry().bottomRight() - mapToGlobal(event->pos());
        if(diff.x() <= 6 && diff.y() <= 6) {
            if(!resizeMode) {
                setCursor(Qt::SizeFDiagCursor);
                resizeMode = true;
            }
        } else {
            if(resizeMode) {
                setCursor(Qt::SizeAllCursor);
                resizeMode = false;
            }
        } …
Run Code Online (Sandbox Code Playgroud)

c++ qt resize widget borderless

5
推荐指数
2
解决办法
8135
查看次数

使用MinGW部署Qt需要VC++可再发行吗?

我在一个干净的XP虚拟盒上使用QG 4.7.3在MinGW上编译了一个应用程序.该应用程序无法正常工作,经过多次悲痛之后,我将错误跟踪到需要下载Visual C++ 2005可再发行组件.我下载了这个并且它有效.这里看起来不对,我不应该需要任何VC++库,因为我使用MinGW?这可能是我编译的问题吗?我应该提一下,我没有使用qmake来构建.

deployment qt

5
推荐指数
1
解决办法
2956
查看次数

标签 统计

qt ×3

c++ ×2

border ×1

borderless ×1

c ×1

deployment ×1

extern ×1

qitemdelegate ×1

qtableview ×1

resize ×1

struct ×1

typedef ×1

widget ×1