QT ui 동작 프로세스 관련 질문드립니다. > QT 질문/답변

본문 바로가기
사이트 내 전체검색

QT 질문/답변

QT/Win32 QT ui 동작 프로세스 관련 질문드립니다.

페이지 정보

작성자 no_profile 그누그 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글 3건 조회 1,306회 작성일 21-02-02 16:34

본문

가독성을 위해 불필요한 코드는 지웠습니다.

mainwindow.cpp 보시면 생성자에 qDebug로 ui ptr을 출력하게 해놓았습니다.
  ui ptr :  0x314cc0
  ui ptr :  0x3184c0    ////// 프로그램 실행시키면 이렇게 qDeubg()가 두 번이 실행됩니다.
1. 이렇게 ui 주소가 두 번이 출력되는 이유를 알고 싶습니다.
2. on_pushButton_1_clicked() 클릭 이벤트를 통해서는 ListWidget에 출력이 되지만 connect로 연결시킨 이벤트로는 ListWidget이 출력되지 않습니다.
  두 개의 이벤트 모두 전송받은 데이터는 qDebug()로 확인되지만, connect로 연결시킨 데이터만 ListWidget에 출력되지 않습니다.
  qDebug() << "ui2 ptr : " << ui; 로 확인해보니 클릭 이벤트의 ui 주소는 0x314cc0이고 connect 이벤트의 ui 주소는 0x3184c0 입니다.
3. connect(this, SIGNAL(sendSerial(const QByteArray)), &window, SLOT(showSerial(const QByteArray)));
  위에서 window를 MainWindow *window;와 같이 포인터로 변환하면 MOC에서 이상이 생기는지 프로그램이 켜짐과 동시에 멈춥니다. connect 연결할때 window 앞에 붙은 참조연산자 없앴습니다. 이유가 뭔지 알고 싶습니다.

p.s. c언어를 사용하다 c++공부한지 얼마 안되어 개념이 부족할 수 있습니다. 양해 부탁드립니다.

////////////////////////mainwindow.cpp////////////////////////
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),ui(new Ui::MainWindow)
{
    qDebug() << "ui ptr : " << ui;
    ui->setupUi(this);
    ui->label_1->setText("Player");
    ui->label_1->setFont(QFont("굴림",20));
    ui->label_2->setText("Serial");
    ui->label_2->setFont(QFont("굴림",20));
    ui->label_3->setText("Socket");
    ui->label_3->setFont(QFont("굴림",20));
    ui->pushButton_1->setText("Start");
    ui->pushButton_1->setFont(QFont("굴림",20));
    ui->pushButton_2->setText("Stop");
    ui->pushButton_2->setFont(QFont("굴림",20));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_1_clicked()
{
    this->showSerial("why");
}

void MainWindow::showSerial(const QByteArray recvData)
{
    qDebug() << "recvData : " << recvData;
    ui->listWidget_1->addItem(recvData);
    qDebug() << "ui2 ptr : " << ui;
}

////////////////////////mainwindow.h////////////////////////
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_1_clicked();
    void showSerial(const QByteArray recvData);

private:
    Ui::MainWindow *ui;
};

////////////////////////amu_serial.cpp////////////////////////
amu_serial::amu_serial(QObject *parent) : QThread(parent), m_serial(new QSerialPort(this))
{   
    connect(this, SIGNAL(sendSerial(const QByteArray)), &window, SLOT(showSerial(const QByteArray)));
}

void amu_serial::serReadData()
{
    const QByteArray data = m_serial->readAll();
    SerRecvData.append(data);

    if(SerRecvData.contains(static_cast<unsigned char>(PACKET_ETX_ID)))
    {
        emit sendSerial(SerRecvData);
        SerRecvData = nullptr;
    }
}

////////////////////////amu_serial.h////////////////////////
class amu_serial : public QThread
{
    Q_OBJECT
public:
    explicit amu_serial(QObject *parent = nullptr);

signals:
    void sendSerial(const QByteArray recvData);

private slots:
    void serReadData();

private:
    MainWindow window;
};

추천0

댓글목록

cryfreedom님의 댓글

no_profile cryfreedom 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

1. 생성자가 두 번 불리는것 같은데 MainWindow창을 1개만 띄우는지 확인
2. 위와 동일, connect 맨 끝에 파라미터로 Qt::QueuedConnection 추가
3. window가 null pointer인 상태에서 connect를 해서 그런것 같은데 생성자에서 connect 하지말고 window 포인터를 넘겨준 후 connect

그누그님의 댓글의 댓글

no_profile 그누그 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

제가 객체 개념이 부족해서 벌어진 상황 같습니다.
1. 초기 main에서 생긴 MainWindow 객체(이름: w) 그리고 w에서 생긴 Ui::MainWindow 객체(이름: ui)
2. 새로 만든 MainWindow 객체(이름: window) 그리고 window에서 생긴 Ui::MainWindow 객체(이름: ui)
1번과 2번이 서로 다른 객체이고 그 안에서 생긴 ui 역시 다른 객체인데 이름이 같아서 헷갈렸습니다.
아직 수정하지 않아서 2번의 ui 포인터를 1번 ui포인터로 수정하면 될지 모르겠습니다.
미리 댓글 남깁니다.

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

그누그님의 댓글의 댓글

no_profile 그누그 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

void MainWindow::sendUi() 함수만 실행시켜주면 객체가 달라도 ui 주소값은 기존 주소값과 동일해집니다.
이런식으로 해서 구현이 되긴 됐는데 좋은 방법은 아닌것 같습니다.
//////////////////////////////////////////////////이후에 싱글톤 패턴으로 다시 구현했습니다.

#include "mainwindow.h"
#include "ui_mainwindow.h"

Ui::MainWindow *pUi;
char uiCnt = 0;

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->pushButton_1->setText("Start");
    ui->pushButton_1->setFont(QFont("굴림",20));
    ui->pushButton_2->setText("Stop");
    ui->pushButton_2->setFont(QFont("굴림",20));

    m_serial.serialLink(ui);
    m_serial.openSerialPort();
    m_server.startServer();

    uiCnt++;
    if(uiCnt == 1)
    {
        pUi = ui;
    }
    else uiCnt = 1;
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_1_clicked()
{
    ui->listWidget_2->addItem("OK");
}

void MainWindow::on_pushButton_2_clicked()
{
    ui->listWidget_2->clear();
}

void MainWindow::sendUi()
{
    ui = pUi;
}

Total -1,102,632건 1 페이지
QT 질문/답변 목록
번호 제목 글쓴이 조회 추천 날짜
-1102632 QT/Embedded no_profile iwmovn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6 0 09:59
-1102633 QT/Embedded no_profile haporq 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7 0 07-26
-1102634 QT/Embedded no_profile qesbtv 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 9 0 07-26
-1102635 QT/Embedded no_profile idupit 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 9 0 07-25
-1102636 QT/Embedded no_profile 지루 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 162 0 06-09
-1102637 QT/Win32 no_profile 에르닉케어 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 235 0 05-12
열람중 QT/Win32 no_profile 그누그 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1307 0 02-02
-1102639 QT/Embedded no_profile 슈슈 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1283 0 01-19
-1102640 QT/Win32 no_profile 타디스 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1273 0 01-07
-1102641 QT/Embedded no_profile rrrrr 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 751 0 12-23
-1102642 QT/Embedded no_profile thisistophs 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 818 0 12-03
-1102643 QT/Win32 no_profile QT린이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1459 0 10-30
-1102644 QT/Embedded no_profile thisistophs 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 774 0 10-13
-1102645 QT/Win32 no_profile 니폴라 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1560 0 09-19
-1102646 QT/Embedded no_profile 박취 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1559 0 09-15
-1102647 QT/Win32 no_profile qtchqhekd 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 800 0 09-14
-1102648 QT/Win32 no_profile 동도리군 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1936 0 04-19
-1102649 QT/Embedded no_profile 비회원로그인 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1908 0 04-14
-1102650 QT/Embedded no_profile 지루 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2018 0 04-07
-1102651 QT/Embedded no_profile 슈슈 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2581 0 03-30
-1102652 QT/Embedded no_profile inseok 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 1947 0 03-24
-1102653 QT/Embedded no_profile csyinw 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2685 0 02-22
-1102654 QT/Embedded no_profile 박셕 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2934 0 02-10
-1102655 QT/Embedded no_profile 박취 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2396 0 01-31
-1102656 QT/Win32 no_profile 냠냠10 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2873 0 01-31
-1102657 QT/Embedded no_profile wlsqkr 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2665 0 01-31
-1102658 QT/Win32 no_profile 이건칠님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2736 0 01-16
-1102659 QT/Embedded no_profile QT를시작함 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3094 0 12-05
-1102660 QT/X11 no_profile 오슈 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2805 0 12-05
-1102661 QT/Embedded no_profile QT를시작함 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3174 0 12-01
게시물 검색

  • 게시물이 없습니다.

회원로그인

설문조사

새로운 홈페이지에 대한 평가

접속자집계

오늘
646
어제
787
최대
4,337
전체
4,923,600

Copyright © korone.net. All rights reserved.