Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как вернуть указатель?
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
unrecovered
Доброго времени суток. Пишу программу-аналог(пародию?) на TotalCommander, т.е. двухпанельный файловый менеджер. Пишу больше ради улучшения навыков, чем для реального применения =)

Столкнулся со следующей проблемой. Писал функцию, возвращающую, какая панель сейчас является активной; собственно, код:

QListWidget MainWindow::whichactive()
{
    if (ui->lwLeft->isActiveWindow()) return ui->lwLeft;
        else return ui->lwRight;
}

void enterdirectory(QListWidgetItem *item, QLabel *path)
{
    QString cropText;
    cropText=item->text();
    cropText.remove(cropText.length()-1, 1);
    cropText.remove(0,1);
    path->setText(path->text()+cropText);
    load(MainWindow->whichactive(), path);
}


whichactive - искомая функция
enterdirectory - функция входа в каталог

При компиляции функции whichactive появляется ошибка
ошибка: conversion from 'QListWidget*' to non-scalar type 'QListWidget' requested


Собственно, вопрос: как синтаксически правильно написать, чтобы функция возвращала не виджет, а указатель на виджет?

RazrFalcon
Цитата
QListWidget* MainWindow::whichactive()
unrecovered
О_о блин, как всё просто... спасибо

появилась новая ошибка при попытке вызова всё той же whichactive
ошибка: cannot call member function 'QListWidget* MainWindow::whichactive()' without object



не могу понять, какой и где объект требуется
sidsukana
Вы пытаетесь вызвать функцию из несуществующего объекта

MainWindow - это класс.
Чтобы создать объект с указателем на него на его основе нужно
MainWindow* window = new MainWindow;
Потом уже
window->whichactive();
Litkevich Yuriy
Цитата(sidsukana @ 12.10.2012, 9:58) *
MainWindow* window = new MainWindow;
Видимо и тут нужно пояснение, выше приведённая запись равноценна следующей:
MainWindow *window; // объявляем указатель на объект типа MainWindow
window = new MainWindow; // с помощью new создаём объект типа MainWindow, а возвращаемый при создании указатель присваиваем нашему
П.С.
Звёздочку лучше писать всегда при имени переменной, так нагляднее (хотя компилятору всё равно)
unrecovered
К сожалению, это не ответ =\ Мне нужно не создать новый виджет, а передать ссылку на уже существующий.

Попробую описать более подробно. Имеется: главное окно и две панели в нём, lwLeft и lwRight соответственно, созданные как QListWidget. Задача: при возникновении события - клика мышью, нажатия клавиши или сочетания клавиш, нужно передать сигнал события именно той панели, которая сейчас активна(чтобы не дублировать код для каждой панели, поскольку реакция на события у них одинаковая, разница лишь в том, какая панель отреагирует). По замыслу, моя процедура whichactive и должна это определить. Как это сделать наиболее корректно/просто/красиво?
Litkevich Yuriy
в слоте, который принимает сигнал, воспользоваться методом sender(), он возвращает указатель на объект-отправитель сигнала.
ornelius
Цитата(unrecovered @ 11.10.2012, 16:08) *
QListWidget MainWindow::whichactive()
{
    if (ui->lwLeft->isActiveWindow()) return ui->lwLeft;
        else return ui->lwRight;
}


Звездочку забыл в первой строчке. Надо так:
QListWidget *MainWindow::whichactive()
{
    if (ui->lwLeft->isActiveWindow())
        return ui->lwLeft;
    return ui->lwRight;
}
Алексей1153
Цитата(Litkevich Yuriy @ 12.10.2012, 10:33) *
Звёздочку лучше писать всегда при имени переменной, так нагляднее

а я не согласен ) Считаю, что это часть типа переменной, поэтому пишу возле типа
unrecovered
2Litkevich Yuriy
Спасибо за наводку =) Через sender() действительно проще и красивее. Нашел тут инфу на эту тему с примерами: http://qt.osdn.org.ua/signalmapper.html
На случай если вдруг этот топик через поиск найдут... :D
Litkevich Yuriy
Цитата(Алексей1153 @ 17.10.2012, 17:31) *
Считаю, что это часть типа переменной
ни в коем случае.
Новички вообще "приедут" при краткой форме записи:
char* first, second;
Равносильна:
char* first;
char second;
а не
char *first;
char *second;
В случае, когда звёздочка стоит при имени, получается нагляднее, где указатель, а где - нет
Алексей1153
а всё потому, что так никогда не нужно писать

char* first, second; //ужасный стиль

только так

char* first;
char* second;
digidrofosfat
Эээээ


QListWidget* MainWindow::whichactive()
{
if (ui->lwLeft->isActiveWindow()) return ui->lwLeft;
else return ui->lwRight;
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.